/*
 *  v-debounce
 *  按钮防抖指令，可自行扩展至input
 *  接收参数：function类型
 *
 *  使用场景:
 *      防抖在连续的事件，只需触发一次回调的场景有：
 *      搜索框搜索输入。只需用户最后一次输入完，再发送请求
 *      手机号、邮箱验证输入检测
 *      窗口大小resize。只需窗口调整完成后，计算窗口大小。防止重复渲染。
 */
const debounce = {
    mounted(el, binding) {
        if (typeof binding.value !== 'function') {
            throw 'callback must be a function'
        }
        let timer = null
        el.__handleClick__ = function () {
            if (timer) {
                clearInterval(timer)
            }
            timer = setTimeout(() => {
                binding.value()
            }, 500)
        }
        el.addEventListener('click', el.__handleClick__)
    },
    beforeUnmount(el) {
        el.removeEventListener('click', el.__handleClick__)
    },
}

export default debounce
